From 7c2ce72b5f86690f259a00a0f01be288d8de436a Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Tue, 2 Apr 2019 23:24:57 +0000 Subject: [PATCH] inspector: Manage visibility of stack pages The hand-rolled stack combo we were using before was looking at the visibility of the page itself to show or hide items. Other stack switchers expect us to use the GtkStackPage::visible property for this. --- gtk/inspector/actions.c | 18 +++++++++++++----- gtk/inspector/controllers.c | 13 ++++++++++++- gtk/inspector/css-node-tree.c | 9 +++++++-- gtk/inspector/data-list.c | 10 ++++++++-- gtk/inspector/magnifier.c | 11 +++++++++-- gtk/inspector/menu.c | 22 ++++++++++++++++------ gtk/inspector/size-groups.c | 16 ++++++++++------ 7 files changed, 75 insertions(+), 24 deletions(-) diff --git a/gtk/inspector/actions.c b/gtk/inspector/actions.c index cd6f413ac2..c4ec553c27 100644 --- a/gtk/inspector/actions.c +++ b/gtk/inspector/actions.c @@ -28,6 +28,7 @@ #include "gtkwidgetprivate.h" #include "gtkpopover.h" #include "gtklabel.h" +#include "gtkstack.h" enum { @@ -167,13 +168,14 @@ action_state_changed_cb (GActionGroup *group, static void add_group (GtkInspectorActions *sl, + GtkStackPage *page, GActionGroup *group, const gchar *prefix) { gint i; gchar **names; - gtk_widget_show (GTK_WIDGET (sl)); + g_object_set (page, "visible", TRUE, NULL); g_signal_connect (group, "action-added", G_CALLBACK (action_added_cb), sl); g_signal_connect (group, "action-removed", G_CALLBACK (action_removed_cb), sl); @@ -203,16 +205,22 @@ void gtk_inspector_actions_set_object (GtkInspectorActions *sl, GObject *object) { - gtk_widget_hide (GTK_WIDGET (sl)); + GtkWidget *stack; + GtkStackPage *page; + + stack = gtk_widget_get_parent (GTK_WIDGET (sl)); + page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl)); + + g_object_set (page, "visible", FALSE, NULL); g_hash_table_foreach (sl->priv->groups, disconnect_group, sl); g_hash_table_remove_all (sl->priv->groups); g_hash_table_remove_all (sl->priv->iters); gtk_list_store_clear (sl->priv->model); if (GTK_IS_APPLICATION (object)) - add_group (sl, G_ACTION_GROUP (object), "app"); + add_group (sl, page, G_ACTION_GROUP (object), "app"); else if (GTK_IS_APPLICATION_WINDOW (object)) - add_group (sl, G_ACTION_GROUP (object), "win"); + add_group (sl, page, G_ACTION_GROUP (object), "win"); else if (GTK_IS_WIDGET (object)) { const gchar **prefixes; @@ -225,7 +233,7 @@ gtk_inspector_actions_set_object (GtkInspectorActions *sl, for (i = 0; prefixes[i]; i++) { group = gtk_widget_get_action_group (GTK_WIDGET (object), prefixes[i]); - add_group (sl, group, prefixes[i]); + add_group (sl, page, group, prefixes[i]); } g_free (prefixes); } diff --git a/gtk/inspector/controllers.c b/gtk/inspector/controllers.c index 179b4fa625..4fa0b313b8 100644 --- a/gtk/inspector/controllers.c +++ b/gtk/inspector/controllers.c @@ -33,6 +33,7 @@ #include "gtkscrolledwindow.h" #include "gtksortlistmodel.h" #include "gtkwidgetprivate.h" +#include "gtkstack.h" enum { @@ -204,13 +205,23 @@ void gtk_inspector_controllers_set_object (GtkInspectorControllers *sl, GObject *object) { + GtkWidget *stack; + GtkStackPage *page; GtkInspectorControllersPrivate *priv = sl->priv; GtkMapListModel *map_model; GtkFlattenListModel *flatten_model; GtkSortListModel *sort_model; + stack = gtk_widget_get_parent (GTK_WIDGET (sl)); + page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl)); + if (!GTK_IS_WIDGET (object)) - return; + { + g_object_set (page, "visible", FALSE, NULL); + return; + } + + g_object_set (page, "visible", TRUE, NULL); priv->model = gtk_property_lookup_list_model_new (GTK_TYPE_WIDGET, "parent"); gtk_property_lookup_list_model_set_object (priv->model, object); diff --git a/gtk/inspector/css-node-tree.c b/gtk/inspector/css-node-tree.c index b7d9a3cb13..6093c81d5f 100644 --- a/gtk/inspector/css-node-tree.c +++ b/gtk/inspector/css-node-tree.c @@ -408,6 +408,8 @@ void gtk_inspector_css_node_tree_set_object (GtkInspectorCssNodeTree *cnt, GObject *object) { + GtkWidget *stack; + GtkStackPage *page; GtkInspectorCssNodeTreePrivate *priv; GtkCssNode *node, *root; GtkTreePath *path; @@ -417,13 +419,16 @@ gtk_inspector_css_node_tree_set_object (GtkInspectorCssNodeTree *cnt, priv = cnt->priv; + stack = gtk_widget_get_parent (GTK_WIDGET (cnt)); + page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (cnt)); + if (!GTK_IS_WIDGET (object)) { - gtk_widget_hide (GTK_WIDGET (cnt)); + g_object_set (page, "visible", FALSE, NULL); return; } - gtk_widget_show (GTK_WIDGET (cnt)); + g_object_set (page, "visible", TRUE, NULL); root = node = gtk_widget_get_css_node (GTK_WIDGET (object)); while (gtk_css_node_get_parent (root)) diff --git a/gtk/inspector/data-list.c b/gtk/inspector/data-list.c index 6ba7955f0e..c15ace1352 100644 --- a/gtk/inspector/data-list.c +++ b/gtk/inspector/data-list.c @@ -26,6 +26,7 @@ #include "gtkcellrenderertext.h" #include "gtktogglebutton.h" #include "gtklabel.h" +#include "gtkstack.h" struct _GtkInspectorDataListPrivate @@ -116,15 +117,20 @@ void gtk_inspector_data_list_set_object (GtkInspectorDataList *sl, GObject *object) { + GtkWidget *stack; + GtkStackPage *page; gchar *title; + stack = gtk_widget_get_parent (GTK_WIDGET (sl)); + page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl)); + clear_view (sl); sl->priv->object = NULL; sl->priv->show_data = FALSE; if (!GTK_IS_TREE_MODEL (object)) { - gtk_widget_hide (GTK_WIDGET (sl)); + g_object_set (page, "visible", FALSE, NULL); return; } @@ -132,7 +138,7 @@ gtk_inspector_data_list_set_object (GtkInspectorDataList *sl, gtk_label_set_label (GTK_LABEL (sl->priv->object_title), title); g_free (title); - gtk_widget_show (GTK_WIDGET (sl)); + g_object_set (page, "visible", TRUE, NULL); sl->priv->object = GTK_TREE_MODEL (object); add_columns (sl); diff --git a/gtk/inspector/magnifier.c b/gtk/inspector/magnifier.c index f4a0f7e2e3..34cf33fa19 100644 --- a/gtk/inspector/magnifier.c +++ b/gtk/inspector/magnifier.c @@ -24,6 +24,7 @@ #include "gtklabel.h" #include "gtkadjustment.h" +#include "gtkstack.h" enum { @@ -51,16 +52,22 @@ void gtk_inspector_magnifier_set_object (GtkInspectorMagnifier *sl, GObject *object) { + GtkWidget *stack; + GtkStackPage *page; + + stack = gtk_widget_get_parent (GTK_WIDGET (sl)); + page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl)); + sl->priv->object = NULL; if (!GTK_IS_WIDGET (object) || !gtk_widget_is_visible (GTK_WIDGET (object))) { - gtk_widget_hide (GTK_WIDGET (sl)); + g_object_set (page, "visible", FALSE, NULL); _gtk_magnifier_set_inspected (GTK_MAGNIFIER (sl->priv->magnifier), NULL); return; } - gtk_widget_show (GTK_WIDGET (sl)); + g_object_set (page, "visible", TRUE, NULL); sl->priv->object = GTK_WIDGET (object); diff --git a/gtk/inspector/menu.c b/gtk/inspector/menu.c index 8a4d1ad93f..3374418942 100644 --- a/gtk/inspector/menu.c +++ b/gtk/inspector/menu.c @@ -23,6 +23,7 @@ #include "gtktreestore.h" #include "gtkwidgetprivate.h" #include "gtklabel.h" +#include "gtkstack.h" enum @@ -49,11 +50,13 @@ gtk_inspector_menu_init (GtkInspectorMenu *sl) } static void add_menu (GtkInspectorMenu *sl, + GtkStackPage *page, GMenuModel *menu, GtkTreeIter *parent); static void add_item (GtkInspectorMenu *sl, + GtkStackPage *page, GMenuModel *menu, gint idx, GtkTreeIter *parent) @@ -91,14 +94,14 @@ add_item (GtkInspectorMenu *sl, gtk_tree_store_set (sl->priv->model, &iter, COLUMN_LABEL, _("Unnamed section"), -1); - add_menu (sl, model, &iter); + add_menu (sl, page, model, &iter); g_object_unref (model); } model = g_menu_model_get_item_link (menu, idx, G_MENU_LINK_SUBMENU); if (model) { - add_menu (sl, model, &iter); + add_menu (sl, page, model, &iter); g_object_unref (model); } @@ -110,28 +113,35 @@ add_item (GtkInspectorMenu *sl, static void add_menu (GtkInspectorMenu *sl, + GtkStackPage *page, GMenuModel *menu, GtkTreeIter *parent) { gint n_items; gint i; - gtk_widget_show (GTK_WIDGET (sl)); + g_object_set (page, "visible", TRUE, NULL); n_items = g_menu_model_get_n_items (menu); for (i = 0; i < n_items; i++) - add_item (sl, menu, i, parent); + add_item (sl, page, menu, i, parent); } void gtk_inspector_menu_set_object (GtkInspectorMenu *sl, GObject *object) { - gtk_widget_hide (GTK_WIDGET (sl)); + GtkWidget *stack; + GtkStackPage *page; + + stack = gtk_widget_get_parent (GTK_WIDGET (sl)); + page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl)); + + g_object_set (page, "visible", FALSE, NULL); gtk_tree_store_clear (sl->priv->model); if (G_IS_MENU_MODEL (object)) - add_menu (sl, G_MENU_MODEL (object), NULL); + add_menu (sl, page, G_MENU_MODEL (object), NULL); } static void diff --git a/gtk/inspector/size-groups.c b/gtk/inspector/size-groups.c index 0537edba00..6cd583699b 100644 --- a/gtk/inspector/size-groups.c +++ b/gtk/inspector/size-groups.c @@ -31,6 +31,7 @@ #include "gtkstylecontext.h" #include "gtkswitch.h" #include "gtkwidgetprivate.h" +#include "gtkstack.h" typedef struct { @@ -210,7 +211,6 @@ add_widget (GtkInspectorSizeGroups *sl, g_object_set (label, "margin", 10, NULL); gtk_widget_set_halign (label, GTK_ALIGN_START); gtk_widget_set_valign (label, GTK_ALIGN_BASELINE); - gtk_widget_show (label); gtk_container_add (GTK_CONTAINER (row), label); gtk_container_add (GTK_CONTAINER (listbox), row); } @@ -266,18 +266,22 @@ gtk_inspector_size_groups_set_object (GtkInspectorSizeGroups *sl, GObject *object) { GSList *groups, *l; + GtkWidget *stack; + GtkStackPage *page; + + stack = gtk_widget_get_parent (GTK_WIDGET (sl)); + page = gtk_stack_get_page (GTK_STACK (stack), GTK_WIDGET (sl)); + + g_object_set (page, "visible", FALSE, NULL); clear_view (sl); if (!GTK_IS_WIDGET (object)) - { - gtk_widget_hide (GTK_WIDGET (sl)); - return; - } + return; groups = _gtk_widget_get_sizegroups (GTK_WIDGET (object)); if (groups) - gtk_widget_show (GTK_WIDGET (sl)); + g_object_set (page, "visible", TRUE, NULL); for (l = groups; l; l = l->next) { GtkSizeGroup *group = l->data; -- 2.30.2